1use crate::data_link::{get_resource, read_resource};
2use bitfields::bitfield;
3use std::ffi::c_char;
4
5#[derive(Debug, Clone)]
6#[repr(C)]
7pub struct RealTimeData {
8 pub game_build: u32,
10
11 pub game_state: u32,
13
14 pub language: u32,
16
17 pub time_of_day: u32,
19
20 pub map_id: u32,
22
23 pub map_type: u32,
25
26 pub ip_address: [u8; 4],
28
29 pub cursor: [f32; 3],
31
32 pub squad_markers: [[f32; 3]; 8],
34
35 pub group_type: u32,
37
38 pub group_member_count: u32,
40
41 _reserved2: u32,
43
44 _reserved1: u32,
46
47 pub account_name: [c_char; 140],
49
50 pub character_name: [c_char; 140],
52
53 pub character_position: [f32; 3],
55
56 pub character_facing: [f32; 3],
58
59 pub profession: u32,
61
62 pub elite_specialization: u32,
64
65 pub mount_index: u32,
67
68 pub character_state: u32,
70
71 pub camera_position: [f32; 3],
73
74 pub camera_facing: [f32; 3],
76
77 pub camera_fov: f32,
79
80 pub is_action_camera: IsActionCam,
82}
83
84impl RealTimeData {
85 pub const SIG: i32 = 0x2501A02C;
87
88 pub const LINK: &str = "RTAPI";
90
91 #[inline]
92 pub fn get_ptr() -> *const Self {
93 get_resource(Self::LINK)
94 }
95
96 #[inline]
97 pub fn read() -> Option<Self> {
98 unsafe { read_resource(Self::LINK) }
99 }
100}
101
102#[bitfield(u32)]
104#[derive(Copy, Clone, PartialEq, Eq)]
105#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
106pub struct IsActionCam {
107 pub is_action_camera: bool,
108
109 #[bits(31)]
110 _padding: u32,
111}